package com.pig4cloud.pig.auth.support.filter;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 安全认证配置属性类
 * <p>
 * 用于配置 OAuth2 认证服务器的安全相关属性。
 * 通过 Spring Boot 的 @ConfigurationProperties 注解，
 * 将配置文件中以 "security" 为前缀的属性绑定到此类。
 * 
 * 支持的配置项：
 * - security.isMicro: 是否为微服务架构
 * - security.encodeKey: 密码加密秘钥
 * - security.ignoreClients: 免验证码客户端列表
 * </p>
 *
 * @author lengleng
 * @date 2025/05/30
 * @since 2020/10/4
 */
@Data  // Lombok 注解，自动生成 getter/setter、toString 等方法
@Component  // Spring 组件注解，将此类注册为 Spring Bean
@RefreshScope  // 支持动态刷新配置，无需重启应用
@ConfigurationProperties("security")  // 绑定配置文件中以 security 为前缀的属性
public class AuthSecurityConfigProperties {

	/**
	 * 是否为微服务架构
	 * <p>
	 * true: 微服务架构，密码解密由网关处理
	 * false: 单体应用，密码解密由认证服务器自己处理
	 */
	private boolean isMicro;

	/**
	 * 密码加密秘钥
	 * <p>
	 * 用于解密前端传输的加密密码。
	 * 在微服务架构中，网关会使用此秘钥解密；
	 * 在单体应用中，认证服务器直接使用此秘钥。
	 * 
	 * 配置示例：security.encode-key=pigx
	 */
	private String encodeKey;

	/**
	 * 免验证码的客户端列表
	 * <p>
	 * 配置在此列表中的客户端不需要输入验证码即可登录。
	 * 通常用于内部系统或可信任的客户端。
	 * 
	 * 配置示例：
	 * security.ignore-clients[0]=test
	 * security.ignore-clients[1]=admin
	 */
	private List<String> ignoreClients;

}
